<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>深拷贝与浅拷贝</title>
    <script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>


<script>
    /* 方法一
    function deepClone(obj){
        //判断obj是否为数组
        let objClone = Array.isArray(obj)?[]:{};
        if(obj && typeof obj ==="object"){
            for(key in obj){
                //指示对象自身属性中是否含有指定的属性
                if(obj.hasOwnProperty(key)){
                    //判断obj子元素是否为对象，如果是，递归复制
                    if(obj[key]&&typeof obj[key]==="object"){
                        objClone[key]=deepClone(obj[key]);
                    }else{
                        //如果不是，简单复制
                        objClone[key]=obj[key];
                    }
                }
            }
        }
        return objClone;
    }

    var a=[0,1,2,3,4],
        b=deepClone(a);
    a[0]=1;
    console.log(a,b);
    //(a) [1, 1, 2, 3, 4] (b) [0, 1, 2, 3, 4]; b 未跟随 a 而改变，实现了深拷贝
    var a=[{a1:"11"},{a2:"22"},{a3:"33"}];
    var b=deepClone(a);
    a[0].a1="111";
    console.log(a,b);

    // slice 是深拷贝吗？
    var a = [1,[2.1,2.2],3,4];
    var b =a.slice();
    a[0]=5;
    a[1][0]=2.3;
    console.log(a,b);

*/


    /*方法二
    //借用JSON对象的parse和stringify
    // JSON.stringify() 将一个JavaScript值(对象或者数组)转换为一个 JSON字符串
    // JSON.parse() 将一个 JSON 字符串转换为对象
    function  deepClone(obj) {
        var _obj = JSON.stringify(obj);
        var objClone = JSON.parse(_obj);
        return objClone;
    }
    // slice 是深拷贝吗？
    var a = [1,[2.1,2.2],3,4];
    var b =deepClone(a);
    a[0]=5;
    a[1][0]=2.3;
    console.log(a,b);
    */

    // 方法三 ：使用$.extend()函数
    var a=[1,2,[3.1,3.2],4,5];
    var b = $.extend(true,[],a);
    a[0]=0;
    a[2][0]=3.3;
    console.log(a,b);

    var chinese={
        nation:'中国'
    };
    var Doctor=$.extend(true,{career:'医生',name:'peter'},chinese);
    console.log(chinese,Doctor);

    var object1={
        apple:0,
        banana:{weight:52,price:100},
        cherry:97
    }
    var object2={
        banana:{price: 200},
        durian:100
    }
    $.extend(object1,object2);
    console.log(object1);



</script>







</body>
</html>